/**
 * @category 数据库操作器
 * @function 封装数据库增删改查的基本操作
 */
package com.gxuwz.dbOper;

import java.sql.*;

public class MySQLOperator {
	private MySQLConnector connector = null;
	private Connection ct = null;
	private PreparedStatement ps = null;
	private ResultSet rs = null;
	
	/**
	 * @category 无参构造函数
	 * @function 实例化数据库连接器、获取数据库连接对象
	 */
	public MySQLOperator(){
		//实例化连接器
		connector = new MySQLConnector();
		if(ct == null){//数据库连接对象为空则实例化
			ct = connector.getConnection();
		}
	}
	
	/**
	 * @category 数据插入函数
	 * @param sql insert语句
	 * @return 插入成功返回true，插入失败返回false
	 */
	public boolean insert(String sql)
	{
		boolean b = false;
		if(sql.indexOf("insert")!=-1 || sql.indexOf("INSERT")!=-1){
			try {
				if(null==ct){
					ct = connector.getConnection();
				}
				ps = ct.prepareStatement(sql);
				if (ct.prepareStatement(sql).executeUpdate() != 0) {
					b = true;
				}
				DBconfig.commit(ct);//提交事务
			} catch (SQLException e) {
				System.out.println("在执行数据插入语句：" + sql + " 时出错！");
				e.printStackTrace();
				DBconfig.rollback(ct);//事务回滚
			}
		}else{//不是插入sql语句
			System.out.println(new Exception("你输入的sql语句："+sql+" 不是插入语句！").toString());
		}
		
		return b;
	}
	
	/**
	 * @category 数据删除函数
	 * @param sql delete语句
	 * @return 删除成功返回true，删除失败返回false
	 */
	public boolean delete(String sql)
	{
		boolean b = false;
		if(sql.indexOf("delete")!=-1 || sql.indexOf("DELETE")!=-1){
			try {
				if(null==ct){
					ct = connector.getConnection();
				}
				ps = ct.prepareStatement(sql);
				if (ps.executeUpdate() != 0) {
					b = true;
				}
				DBconfig.commit(ct);//提交事务
			} catch (SQLException e) {
				System.out.println("在执行数据删除语句：" + sql + " 时出错！");
				e.printStackTrace();
				DBconfig.rollback(ct);//事务回滚
			}
		}else{//不是删除sql语句
			System.out.println(new Exception("你输入的sql语句："+sql+" 不是删除语句！").toString());
		}
		return b;
	}
	
	/**
	 * @category 数据更新函数
	 * @param sql update语句
	 * @return 更新成功返回true，更新失败返回false
	 */
	public boolean update(String sql)
	{
		boolean b = false;
		if(sql.indexOf("update")!=-1 || sql.indexOf("UPDATE")!=-1){
			try {
				if(null==ct){
					ct = connector.getConnection();
				}
				ps = ct.prepareStatement(sql);
				if (ps.executeUpdate() != 0) {
					b = true;
				}
				DBconfig.commit(ct);//提交事务
			} catch (SQLException e) {
				System.out.println("在执行数据更新语句：" + sql + " 时出错！");
				e.printStackTrace();
				DBconfig.rollback(ct);//事务回滚
			}
		}else{//不是更新sql语句
			System.out.println(new Exception("你输入的sql语句："+sql+" 不是更新语句！").toString());
		}
		
		return b;
	}
	
	/**
	 * @category 数据查询函数
	 * @param sql query语句
	 * @return 查询成功返回非空ResultSet对象，否则返回空ResultSet对象
	 */
	public ResultSet query(String sql)
	{
		rs = null;
		if(sql.indexOf("select")!=-1 || sql.indexOf("SELECT")!=-1){
			try {
				if(null==ct){
					ct = connector.getConnection();
				}
				ps = ct.prepareStatement(sql);
				rs = ps.executeQuery();
			} catch (SQLException e) {
				System.out.println("在执行数据查询语句：" + sql + " 时出错！");
				e.printStackTrace();
			}
		}else{//不是查询sql语句
			System.out.println(new Exception("你输入的sql语句："+sql+" 不是查询语句！").toString());
		}
		return rs;
	}
	
	/**
	 * @category 表记录总数获取函数
	 * @param tableName 数据库表名
	 * @return 返回int类型的数据库表记录总数
	 */
	public int getTableRows(String tableName){
		int rows = 0;
		String sql = "select count(*) from "+tableName;
		rs = this.query(sql);
		try {
			if(rs.next()){
				rows = rs.getInt(1);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rows;
	}
	
}
